package br.com.petsis.funcionalidades.manterFuncionarios;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.faces.FacesMessages;
import org.jboss.seam.international.StatusMessage.Severity;

import com.jhlabs.image.ErodeFilter;

import br.com.petsis.entity.Cliente;
import br.com.petsis.entity.Empresa;
import br.com.petsis.entity.Funcionario;

@Name("manterFuncionariosController")
@Scope(ScopeType.CONVERSATION)
//@Restrict(value="#{identity.hasRole('Administrador')}")
public class ManterFuncionariosController {
	
	private static final String QRY_FUNCIONARIOS = "select f from Funcionario f where f.empresa.idEmpresa = :idEmpresa and f.flgAtivo = 'T'";
	
	@In(create=true)
	private EntityManager entityManager;
	
	private List<Funcionario> listaFuncionarios;
	
	private Funcionario funcionarioEdicao;
	
	private boolean selecionadoTodos;
	
	@In(required=false)
	private Empresa empresaSessao;
	
	private String filtroNome;
	
	private String filtroCargo;
	
	private String filtroTelefone;
	
	public String getFiltroNome() {
		return filtroNome;
	}

	public void setFiltroNome(String filtroNome) {
		this.filtroNome = filtroNome;
	}

	public String getFiltroCargo() {
		return filtroCargo;
	}

	public void setFiltroCargo(String filtroCargo) {
		this.filtroCargo = filtroCargo;
	}

	public String getFiltroTelefone() {
		return filtroTelefone;
	}

	public void setFiltroTelefone(String filtroTelefone) {
		this.filtroTelefone = filtroTelefone;
	}
	
	public boolean filtrarClientesPorNome(Object current){
		Funcionario funcionario = (Funcionario)current;
		if(getFiltroNome() == null || getFiltroNome().isEmpty()){
			return true;
		}
		if(funcionario.getDscNome().toLowerCase().contains(getFiltroNome().toLowerCase())){
			return true;
		}else{
			return false;
		}
	}
	
	public boolean filtrarClientesPorCargo(Object current){
		Funcionario funcionario = (Funcionario)current;
		if(getFiltroCargo() == null || getFiltroCargo().isEmpty()){
			return true;
		}
		if(funcionario.getDscCargo().toLowerCase().contains(getFiltroCargo().toLowerCase())){
			return true;
		}else{
			return false;
		}
	}
	
	public boolean filtrarClientesPorTelefone(Object current){
		Funcionario funcionario = (Funcionario)current;
		if(getFiltroTelefone() == null || getFiltroTelefone().isEmpty()){
			return true;
		}
		if(funcionario.getTelContato().toLowerCase().contains(getFiltroTelefone().toLowerCase())){
			return true;
		}else{
			return false;
		}
	}

	public void onLoad(){
		
	}
	
	public void onLoadList(){
		funcionarioEdicao = new Funcionario();
	}
	
	public void excluir(){
		List<Funcionario> listaRemocao = new ArrayList<Funcionario>();
		for(Funcionario f : getListaFuncionarios()){
			if(f.isSelecionado()){
				f.setFlgAtivo('F');
				entityManager.merge(f);
				listaRemocao.add(f);
			}
		}
		entityManager.flush();
		getListaFuncionarios().removeAll(listaRemocao);
	}
	
	public String salvar(){
		if(empresaSessao == null){
			FacesMessages.instance().add(Severity.ERROR,"Somente empresas podem salvar funcionários");
			return null;
		}
		getFuncionarioEdicao().setFlgAtivo('T');
		getFuncionarioEdicao().setEmpresa(empresaSessao);
		Funcionario funcionarioSalvo = entityManager.merge(getFuncionarioEdicao());
		entityManager.flush();
		funcionarioEdicao = new Funcionario();
		setListaFuncionarios(null);
		getListaFuncionarios();
		FacesMessages.instance().add(Severity.INFO,"Funcion�rio salvo com sucesso.");
		return "persisted";
	}
	
	public String editar(Funcionario funcionario){
		funcionarioEdicao = funcionario;
		return "editar";
	}

	public boolean isSelecionadoTodos() {
		return selecionadoTodos;
	}

	public void setSelecionadoTodos(boolean selecionadoTodos) {
		this.selecionadoTodos = selecionadoTodos;
	}
	
	public void selecionaTodos(){
		for(Funcionario f : getListaFuncionarios()){
			if(isSelecionadoTodos()){
				f.setSelecionado(true);
			}else{
				f.setSelecionado(false);
			}
		}
	}

	public List<Funcionario> getListaFuncionarios() {
		if (listaFuncionarios == null) {
			if(empresaSessao != null){
				listaFuncionarios = entityManager.createQuery(QRY_FUNCIONARIOS)
					.setParameter("idEmpresa", empresaSessao.getIdEmpresa())
					.getResultList();
			}
		}
		return listaFuncionarios;
	}

	public void setListaFuncionarios(List<Funcionario> listaFuncionarios) {
		this.listaFuncionarios = listaFuncionarios;
	}

	public Funcionario getFuncionarioEdicao() {
		if (funcionarioEdicao == null) {
			funcionarioEdicao = new Funcionario();
		}
		return funcionarioEdicao;
	}

	public void setFuncionarioEdicao(Funcionario funcionarioEdicao) {
		this.funcionarioEdicao = funcionarioEdicao;
	}

	public String novoFuncionario(){
		return "novo"; 
	}
	
	public String cancelar(){
		funcionarioEdicao = new Funcionario();
		return "voltar";  
	}
	
}
